package it.controllocredito.backend.utility;

import it.controllocredito.backend.phone.calllog.BeanChiamata;
import it.controllocredito.backend.phone.calllog.BeanChiamateNumero;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.ArrayList;

import android.os.Environment;

public class Utility 
{
	// ________________________________________________________________________________________________________________>>
	
	// ******************************************************************************************************************
	// *** 											        COSTANTS: 											      ***
	// ***									      Propieta' statiche della classe 									  ***
	// ******************************************************************************************************************

	public static final int SUNDAY   =  1;
	public static final int MONDAY   =  2;
	public static final int TUESDAY  =  3;
	public static final int WEDNSDAY =  4;
	public static final int THUESDAY =  5;
	public static final int FRIDAY   =  6;
	public static final int SATURDAY =  7;
	
	public static final String PERCORSO_FILE = Environment.getExternalStorageDirectory() + "/";
	
	public static final String NOME_FILE_OPZIONI_CONFIG_NUMERI_ESCLUSI   = "numeriDaEscludere.txt";
	public static final String NOME_FILE_SAVE_REGISTRO_CHIAMATE          = "ultimaChiamata.txt";
	
	public static final int INDEX_NUMERO_TELEFONO                        = 0;
	public static final int INDEX_CONSUMO_TOTALE                         = 1;
	public static final int INDEX_DATA_ULTIMA_CHIAMATA                   = 2;
	public static final int INDEX_DATA_TIPO_CHIAMATA                     = 3;
	public static final int ROAMING                                      = 4;
	
	// _______________________________________________________________________________________________________________<<
	
	
	
	
	
	
	// ________________________________________________________________________________________________________________>>
	
	// ******************************************************************************************************************
	// *** 											        METODI:  											      ***
	// ***									         Metodi di utilita' 			 								  ***
	// ******************************************************************************************************************
	/**
	 * Metodo di utilia' statico per si occupa di fare append delle chiamate e calcolare durata totale a quel numero, etc.
	 * @param listaChiamate Lista con le tutte le singole chiamate
	 * @param beanChiamata Contiene il bean dove settiamo le informazioni relative alla singola chiamata
	 * @param beanChiamateNumero Contiene il bean dove settiamo le informazioni relative alle chiaamte con quel numero
	 * @return BeanChiamateNumero Contenente il contenitore delle chiamate per quel numero + la lista di tutte le chiamate verso quel numero
	 */
	public static BeanChiamateNumero appendChiamate(ArrayList<BeanChiamata> listaChiamate,BeanChiamata beanChiamata, BeanChiamateNumero beanChiamateNumero)
	{
		listaChiamate.add(beanChiamata);	
		
		beanChiamateNumero.setListaChiamatate(listaChiamate);
		
		beanChiamateNumero.setNumeroTelefono(beanChiamata.getNumeroTelefono());
		
		beanChiamateNumero.setDurataTotaleChiamate(beanChiamateNumero.getDurataTotaleChiamate() + beanChiamata.getDurataChiamata());
		
		return beanChiamateNumero;
	}
	
	
	
	/**
	 * Metodo di lettura file
	 * @param percorso File con slash finale
	 * @param nome File con estensione finale
	 * @return String Contenuto del file
	 */
	public static String letturaSuFile(String percorso, String nomeFile)
    {
    	
    	StringBuffer contenuto = new StringBuffer();
    	
    	File f = new File(percorso + nomeFile);
    	
		try 
		{
			
			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
    	
			String linea = bufferedReader.readLine();
    	
			while(linea!= null)
			{
				linea = bufferedReader.readLine();
				
				contenuto.append(linea);
			}
			
			bufferedReader.close();
    	
		} catch (FileNotFoundException e)
		{
			e.printStackTrace();
		} catch (IOException e) 
		{
			e.printStackTrace();
		}
		
        return contenuto.toString();
	}
	
	
	/**
	 * Metodo di lettura file con ricerca
	 * @param percorso File con slash finale
	 * @param nome File con estensione finale
	 * @param Filtro di ricerca
	 * @return String Contenuto del file
	 */
	public static String letturaSuFile(String percorso, String nomeFile, String search)
    {
    	
    	String contenuto = null;
    	
    	File f = new File(percorso + nomeFile);
    	
		try 
		{
			
			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
    	
			String linea = bufferedReader.readLine();
    	
			while(linea!= null)
			{
				linea = bufferedReader.readLine();
				
				String[] arrContenuto = linea.split(";");
				
				if (arrContenuto[INDEX_NUMERO_TELEFONO].toString().trim().equals(search.trim().toString()))			
						contenuto = arrContenuto[INDEX_NUMERO_TELEFONO];
			}
			
			bufferedReader.close();
    	
		} catch (FileNotFoundException e)
		{
			e.printStackTrace();
		} catch (IOException e) 
		{
			e.printStackTrace();
		}
		
        return contenuto;
	}
  
		
	/**
	 * Metodo di scrittura file
	 * @param percorso File con slash finale
	 * @param nome File con estensione finale
	 * @return boolean Ritorna esisto finale
	 */
    public static boolean scriviSuFile(String percorso, String nomeFile, String riga)
    {	  
    	boolean ok = true;
    
    	try
    	{
    		 FileOutputStream fileOutputStream = new FileOutputStream(percorso + nomeFile);
    	     PrintStream printStream = new PrintStream(fileOutputStream);
    	     printStream.println(riga);
    	     ok = true;
    	     
    	     printStream.close();

    	} catch (IOException e) 
    	{
    		ok = false;
    	   	e.printStackTrace();
    	}
    	
    	return ok;
   } 	
    
	/**
	 * Metodo di scrittura file il consumo totale, piu valori
	 * @param percorso File con slash finale
	 * @param nome File con estensione finale
	 * @return boolean Ritorna esisto finale
	 */
    public static boolean scriviSuFile(String percorso, String nomeFile, String[] riga)
    {	  
    	boolean ok = true;
    
    	try
    	{
    		 FileOutputStream fileOutputStream = new FileOutputStream(percorso + nomeFile);
    	     PrintStream printStream = new PrintStream(fileOutputStream);
    	     
    	     for(String linea : riga)
    	     {
        	     printStream.println(linea);
    	     }

    	     ok = true;
    	     
    	     printStream.close();

    	} catch (IOException e) 
    	{
    		ok = false;
    	   	e.printStackTrace();
    	}
    	
    	return ok;
    } 	
	
    
    /**
     * Metodo registrazione chiamata su File
     * @param beanChiamata con dati relativi alla chiamata
     */
    public static void registraFileChiamata(BeanChiamata beanChiamata)
    {
    	String dataChiamata   = String.valueOf(beanChiamata.getDataChiamata());
    	String durataChiaamta = String.valueOf(beanChiamata.getDurataChiamata());
    	String numeroTelefono = beanChiamata.getNumeroTelefono();
    	String tipoChiamata   = beanChiamata.getTipoChiamata();
    	
    	String[] chiamata = new String[4];
    	
    	chiamata[INDEX_NUMERO_TELEFONO] = numeroTelefono;
    	chiamata[INDEX_CONSUMO_TOTALE] = durataChiaamta;
    	chiamata[INDEX_DATA_ULTIMA_CHIAMATA] = dataChiamata;
    	chiamata[INDEX_DATA_TIPO_CHIAMATA] = tipoChiamata;
    	
    	scriviSuFile(Utility.PERCORSO_FILE,Utility.NOME_FILE_SAVE_REGISTRO_CHIAMATE,chiamata);    	
    }
    
    
    /**
     * Metodo registrazione chiamate di un numero su File
     * @param beanChiamata con dati relativi alle chiamate con un certo numero
     */
    public static void registraFileTotaleChiamataSuNumero(BeanChiamateNumero BeanChiamateNumero)
    {
    	String durataChiamata = String.valueOf(BeanChiamateNumero.getDurataTotaleChiamate());
    	String numeroTelefono = BeanChiamateNumero.getNumeroTelefono();
    	
    	String[] chiamata = new String[4];
    	
    	chiamata[INDEX_NUMERO_TELEFONO] = numeroTelefono;
    	chiamata[INDEX_CONSUMO_TOTALE] = durataChiamata;
    	chiamata[INDEX_DATA_ULTIMA_CHIAMATA] = "";
    	chiamata[INDEX_DATA_TIPO_CHIAMATA] = "";
    	
    	scriviSuFile(Utility.PERCORSO_FILE,Utility.NOME_FILE_SAVE_REGISTRO_CHIAMATE,chiamata);    	
    }
    
    
}
